package cn.haut.online_read.utils;

import com.alibaba.fastjson.JSON;

import java.util.HashMap;
import java.util.Map;

import static cn.haut.online_read.utils.Constant.*;
import static cn.haut.online_read.utils.Constant.MESSAGE_KEY;

/**
 * @author xing
 * @date 2021-05-14 19:23
 */
public class ResponseUtils {

    /**
     * 创建失败的响应
     *
     * @param msg 返回的信息
     * @return JSON
     */
    public static String createError(String msg) {
        return createResponse(CODE_FAIL, msg);
    }

    /**
     * 创建成功的响应
     *
     * @param msg 返回的信息
     * @return JSON
     */
    public static String createSuccess(String msg) {
        return createResponse(CODE_SUCCESS, msg);
    }

    /**
     * 创建成功的响应, msg默认为 ""
     *
     * @return JSON
     */
    public static String createSuccess() {
        return createResponse(CODE_SUCCESS, "");
    }

    /**
     * 创建 token 错误的响应
     * @return
     */
    public static String createTokenError() {
        return createResponse(CODE_TOKEN_ERROR, "请重新登录");
    }

    /**
     * 创建响应参数与值
     *
     * @param codeValue 返回码，例如 CODE_SUCCESS
     * @param msg       返回的信息
     * @return JSON
     */
    private static String createResponse(int codeValue, String msg) {
        Map<String, Object> responseMap = new HashMap<>();
        responseMap.put(CODE_KEY, codeValue);
        responseMap.put(MESSAGE_KEY, msg);
        return JSON.toJSONString(responseMap);
    }

    /**
     * 返回添加成功返回信息后的JSON数据
     *
     * @param responseMap 包含数据的map
     * @param msg         成功信息
     * @return JSON
     */
    public static String addSuccess(Map<String, Object> responseMap, String msg) {
        return addResponse(responseMap, CODE_SUCCESS, msg);
    }

    /**
     * 返回添加成功返回信息后的JSON数据, msg默认为 ""
     *
     * @param responseMap 包含数据的map
     * @return JSON
     */
    public static String addSuccess(Map<String, Object> responseMap) {
        return addResponse(responseMap, CODE_SUCCESS, "");
    }

    /**
     * 返回添加错误返回信息后的JSON数据
     *
     * @param responseMap map
     * @param msg         错误信息
     * @return JSON
     */
    public static String addError(Map<String, Object> responseMap, String msg) {
        return addResponse(responseMap, CODE_FAIL, msg);
    }

    private static String addResponse(Map<String, Object> responseMap, int codeValue, String msg) {
        responseMap.put(CODE_KEY, codeValue);
        responseMap.put(MESSAGE_KEY, msg);
        return JSON.toJSONString(responseMap);
    }
}
